import {
  reqGetCartList,
  reqAddToCart,
  reqUpdateIsCheckCart,
  reqDelCart,
  reqBatchDeleteCart,
  reqBatchCheckCart,
} from "@/api/shopcart";

export default {
  state: {
    cartList: [], //购物车列表
  },
  getters: {},
  actions: {
    // 获取购物车列表
    async getCartList({ commit }) {
      const res = await reqGetCartList();
      // 修改cartList
      if (res[0]) {
        commit("GET_CART_LIST", res[0].cartInfoList);
      } else {
        commit("GET_CART_LIST", []);
      }
    },
    // 更新商品数量
    async updateCartNum({ commit }, { skuId, newSkuNum, oldSkuNum }) {
      // 计算差
      const skuNum = newSkuNum - oldSkuNum;
      // 拿差去发请求修改服务端数据
      await reqAddToCart(skuId, skuNum);
      // 拿新值去更新state
      commit("UPDATE_CART_NUM", { skuId, newSkuNum });
    },
    // 切换商品选中状态
    async updateIsCheckCart({ commit }, { skuId, isChecked }) {
      await reqUpdateIsCheckCart(skuId, isChecked);
      commit("UPDATE_IS_CHECK_CART", { skuId, isChecked });
    },
    // 批量选中购物车
    async batchCheckCart({ commit, state }, isChecked) {
      // isChecked 代表选中
      // 获取修改的商品id列表
      const skuIdList = state.cartList.reduce((prev, cart) => {
        // 如果商品本来是选中就不用改 不选中改为选中
        if (cart.isChecked !== isChecked) {
          return [...prev, cart.skuId];
        } else {
          return prev;
        }
      }, []);
      console.log(skuIdList, isChecked);
      await reqBatchCheckCart(skuIdList, isChecked);
      commit("BATCH_CHECK_CART", isChecked);
    },
    // 删除购物车商品
    async delCart({ commit }, skuId) {
      // 发送请求删除数据 修改state
      await reqDelCart(skuId);
      commit("DEL_CART", skuId);
    },
    // 批量删除购物车
    async batchDeleteCart({ commit, state }) {
      // 获取到已经勾选的商品id列表
      const skuIdList = state.cartList.reduce((prev, cart) => {
        if (cart.isChecked) {
          // prev.push(cart.skuId)
          prev = [...prev, cart.skuId];
          return prev;
        }
        return prev;
      }, []);
      await reqBatchDeleteCart(skuIdList);
      commit("BATCH_DELETE_CART");
    },
  },
  mutations: {
    GET_CART_LIST(state, cartList) {
      state.cartList = cartList;
    },
    UPDATE_CART_NUM(state, { skuId, newSkuNum }) {
      const cart = state.cartList.find((cart) => cart.skuId === skuId); // 根据id查找 找到返回元素
      // console.log(skuId, newSkuNum);
      cart.skuNum = newSkuNum; // 找到更新商品数量
    },
    UPDATE_IS_CHECK_CART(state, { skuId, isChecked }) {
      const cart = state.cartList.find((cart) => cart.skuId === skuId); // 根据id查找 找到返回元素
      cart.isChecked = isChecked; // 找到更新商品状态
    },
    BATCH_CHECK_CART(state, isChecked) {
      // foreach  遍历数组每一项  不可以停止遍历 返回值undefined！！！
      state.cartList.forEach((cart) => (cart.isChecked = isChecked)); // 都改为选中
    },
    DEL_CART(state, skuId) {
      state.cartList = state.cartList.filter((cart) => cart.skuId !== skuId); // 过滤掉删除掉的商品 返回新数组
    },
    BATCH_DELETE_CART(state) {
      state.cartList = state.cartList.filter((cart) => !cart.isChecked); // 剩下的是不选中的
    },
  },
  namespaced: true,
};
